package com.csii.itest;

import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import java.io.File;
import java.io.FileOutputStream;

public class PDFAddWaterMark {

	static float IAMGE_SIZE = 842f; // 限制水印图片的的长宽

	/**
	 * 给pdf文件添加水印
	 * @param file 要加水印的原pdf文件
	 * @throws Exception
	 */
	public static void addPdfMark(String filePash,String outPach) throws Exception {
		File file = new File(filePash);
		// 如果是web项目，应该从web项目里面获取logo
		// String markImagePath =
		// request.getSession().getServletContext().getRealPath("/") +
		// "resources/images/logo.jpg";
		String markImagePath = "d:\\logo.jpg"; // 水印图片路径
		PdfReader reader = new PdfReader(file.getPath(), "PDF".getBytes());
		// 如果是web项目，直接下载应该放到response的流里面
		// PdfStamper stamp = new PdfStamper(reader,
		// response.getOutputStream());
		// 添加水印之后的pdf文件
		PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(
				outPach));
		// 取得当前页数
		int pageSize = reader.getNumberOfPages();
		try {
			// 每两行显示两个 左边一个，右边一个
			for (int i = 1; i <= pageSize; i++) {//循环页
				float pageHeight = reader.getPageSize(i).getHeight();//当前页高
				float pageWidth = reader.getPageSize(i).getWidth();//当前页宽
				// 设置每页显示多少张图片
				int lineNum =  1; // 需要显示图片行数
				//循环需要行
				for (int j = 0, k = 0; j < lineNum; j = j + 2, k++) {
//					Random random = new Random();
					Image img = Image.getInstance(markImagePath);// 插入水印
					img.scaleAbsolute(IAMGE_SIZE, IAMGE_SIZE);//设置水印大小
					img.setAlignment(Image.UNDERLYING); // 在字下面
//					int trueY;
//					while (true) {//循环列
//						trueY = random.nextInt(middleY);
//						if (trueY > IAMGE_WIDTH / 2
//								&& trueY < (middleY - IAMGE_WIDTH)) {
//							break;
//						}
//					}
					img.setAbsolutePosition(0, 0); // 水印的位置
//					img.setRotationDegrees(random.nextInt(360));// 旋转 角度
					PdfContentByte under = stamp.getUnderContent(i);
					PdfGState gs = new PdfGState();
					gs.setFillOpacity(0.5f); // 设置透明度为0.3
					under.setGState(gs);
					under.addImage(img);
//					while (true) {
//						trueY = random.nextInt(middleY) + middleY;
//						if (trueY > middleY + IAMGE_WIDTH / 2
//								&& trueY < (2 * middleY - IAMGE_WIDTH)) {
//							break;
//						}
//					}
//					img.setAbsolutePosition(trueY, j * IAMGE_HEIGHT
//							+ (float) random.nextInt((int) IAMGE_HEIGHT)
//							- (k % 2) * 10); // 水印的位置
//					img.setRotationDegrees(random.nextInt(360));// 旋转 角度
//					under.addImage(img);
				}
			}
		} catch (Exception e) {
			throw e;
		} finally {
			stamp.close();// 关闭
			reader.close();
			System.out.println(file.delete());
			
			file.delete();
		}

	}

}
